//二次封装axios
import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router'

//引入环境地址
import dz from './qqdi'

//创建axios实例
const service = axios.create({
    //在实例化里面引入基地址
    //使用axios请求接口 所以引入基地址
    baseURL: dz.prodEnv.baseURL,
    timeout: 5000 //延迟时间  
})

//设置请求拦截器
service.interceptors.request.use(config => {
    console.log('请求拦截', config)
        //判断是否是登录页面
    if (config.url !== '/login') {
        const token = sessionStorage.getItem('token')
        token && (config.headers['Authorization'] = token)
    }
    //只要不是登录页面  其他页面需要token在请求拦截器中携带
    return config
}, error => {})


//请求响应拦截器
service.interceptors.response.use(res => {
    console.log('响应拦截器：', res)
        //status:code   是给status状态码起了个新的别名  使用的时候使用别名即可  msg是提示信息 无论成功与否的提示信息0
    const { meta: { msg, status: code } } = res.data;
    //后台成功返回的状态码
    const Arr = [200, 201, 204]
        //includes 是一个数组方法  检测是否请求成功
    if (Arr.includes(code)) {
        const { data } = res.data;
        //如果是登录成功，则将后台返回的token保存到本地
        if (res.config.url === '/login') {
            sessionStorage.setItem('token', data.token)
            router.push('/home') //跳转到home页
        }
        //成功的提示
        Message({
            message: msg,
            type: 'success' //成功的弹框类型
        })



        //返回成功后的数据
        return data
            //result  实际上返回的还是data  result是它的别名。结构赋值时自己定义的


    }

    //失败
    Message({
        message: msg,
        type: 'error' //失败的弹框类型
    })
    if (msg === "无效token") {
        return Promise.reject(msg)
    }

    return Promise.reject(msg)
}, error => {})

export default service;